package api_sys

import (
	"github.com/gin-gonic/gin"
	"strconv"
	"wrblog-api-go/app/common/token"
	"wrblog-api-go/app/model/model_sys"
	"wrblog-api-go/app/service/service_sys"
	"wrblog-api-go/pkg/request"
	"wrblog-api-go/pkg/result"
	"wrblog-api-go/pkg/status"
)

// @Tags  System - 菜单管理
// @Summary  获取前端需要的路由
// @Accept json
// @Produce json
// @Param Authorization header string true "Authorization"
// @Success 200 {object} result.Result "OK"
// @Router /getRouters [get]
func ApiRouters(c *gin.Context) {
	result.Ok(service_sys.GetRouters(token.GetUserId(c))).Json(c)
}

// @Tags  System - 菜单管理
// @Summary  获取菜单下拉树表
// @Accept json
// @Produce json
// @Param Authorization header string true "Authorization"
// @Success 200 {object} result.Result "OK"
// @Router /sysMenu/getSelectTree [get]
func ApiSysMenuSelectTree(c *gin.Context) {
	result.Ok(service_sys.GetMenuTree(model_sys.SelectSysMenu{})).Json(c)
}

// @Tags  System - 菜单管理
// @Summary  获取菜单管理树表
// @Accept json
// @Produce json
// @Param Authorization header string true "Authorization"
// @Param sysMenu query model_sys.SelectSysMenu true "sysMenu"
// @Success 200 {object} result.Result "OK"
// @Router /sysMenu/getTree [get]
func ApiSysMenuTree(c *gin.Context) {
	raw, _ := c.Get(request.BindObj)
	sysMenu := raw.(model_sys.SelectSysMenu)
	result.Ok(service_sys.GetMenuTree(sysMenu)).Json(c)
}

// @Tags  System - 菜单管理
// @Summary  获取菜单详情
// @Accept json
// @Produce json
// @Param Authorization header string true "Authorization"
// @Param menuId path int true "menuId"
// @Success 200 {object} result.Result "OK"
// @Router /sysMenu/{menuId} [get]
func ApiSysMenuById(c *gin.Context) {
	menuId, err := strconv.Atoi(c.Param("menuId"))
	if err != nil {
		result.Wrap(status.BadRequest, "参数读取失败").Json(c)
	} else {
		result.Res(service_sys.GetMenuById(menuId)).Json(c)
	}
}

// @Tags  System - 菜单管理
// @Summary  添加菜单
// @Accept json
// @Produce json
// @Param Authorization header string true "Authorization"
// @Param sysMenu body model_sys.SysMenu true "sysMenu"
// @Success 200 {object} result.Result "OK"
// @Router /sysMenu/add [post]
func ApiAddSysMenu(c *gin.Context) {
	raw, _ := c.Get(request.BindObj)
	sysMenu := raw.(model_sys.SysMenuPo)
	sysMenu.CreateBy = token.GetUk(c)
	result.Res(service_sys.AddSysMenu(sysMenu)).Json(c)
}

// @Tags  System - 菜单管理
// @Summary  修改菜单
// @Accept json
// @Produce json
// @Param Authorization header string true "Authorization"
// @Param sysMenu body model_sys.SysMenu true "sysMenu"
// @Success 200 {object} result.Result "OK"
// @Router /sysMenu/edit [put]
func ApiEditSysMenu(c *gin.Context) {
	raw, _ := c.Get(request.BindObj)
	sysMenu := raw.(model_sys.SysMenuPo)
	sysMenu.UpdateBy = token.GetUk(c)
	result.Res(service_sys.EditSysMenu(sysMenu)).Json(c)
}

// @Tags  System - 菜单管理
// @Summary  删除菜单[逻辑删除]
// @Accept json
// @Produce json
// @Param Authorization header string true "Authorization"
// @Param menuId query string true "menuId"
// @Success 200 {object} result.Result "OK"
// @Router /sysMenu/remove [delete]
func ApiRemoveSysMenu(c *gin.Context) {
	menuId := c.Query("menuId")
	result.Res(service_sys.RemoveSysMenu(menuId, token.GetUk(c))).Json(c)
}

// @Tags  System - 菜单管理
// @Summary  删除菜单[物理删除]
// @Accept json
// @Produce json
// @Param Authorization header string true "Authorization"
// @Param menuId query string true "menuId"
// @Success 200 {object} result.Result "OK"
// @Router /sysMenu/delete [delete]
func ApiDeleteSysMenu(c *gin.Context) {
	menuId := c.Query("menuId")
	result.Res(service_sys.DeletedSysMenu(menuId)).Json(c)
}
